//我们的磁盘空间很大,所以我们一般进行分区管理
//只要每个区管理好了,那么整个磁盘就管理好了
//磁盘是典型的块设备,硬盘分区被划分成为一个个block
//一个block的大小是由格式化的时候确定的,并且是不可以更改的
//例如mke2fs的-b选项可以设定block大小为1024、2048或4096字节
//每一个分区里面被分为boot block和若干个block group(有编号)
//boot block里面存放了这个分区启动的一些相关信息

//我们详细看看block group:
//ext2文件系统会根据分区的大小划分为数个Block Group
//而每个Block Group都有着相同的结构组成。

//block group里面的结构细分为:
//超级块（Super Block）：存放文件系统本身的结构信息
//记录的信息主要有：bolck 和 inode的总量，
//未使用的block和inode的数量
//一个block和inode的大小，最近一次挂载的时间
//最近一次写入数据的时间
//最近一次检验磁盘的时间等其他文件系统的相关信息
//Super Block的信息被破坏，可以说整个文件系统结构就被破坏了

//GDT，Group Descriptor Table：块组描述符，描述块组属性信息
//块位图(Block Bitmap):以二进制的方式记录着哪一个块是使用过的,哪一个是未使用的
//0代表未使用,1代表已使用
//inode位图（inode Bitmap）：以二进制的方式记录着哪一个inode是使用过的,哪一个是未使用的
//i节点表(inode Table):存放文件属性如文件大小,所有者,修改时间,使用过哪些数据块等等
//数据块(Data block):时间存放文件内容

//下面从三个方面来说说,文件系统组件的工作原理
//读取文件:
//以读取/tmp/test为例
//1.启动系统时,自动加载'/'目录的inode
//2.根据这个inode,找到'/'目录文件的属性中存放内容的数据块是哪些
//3.定位到这些数据块,里面存放了"/tmp"目录文件的名称和对应的inode编号
//4.根据以上的原理根据inode编号找到这个'/tmp'目录文件的数据块
//5.里面有test的名称和对应的inode编号
//最后找到test的数据块,从而访问test文件

//创建文件:
//根据inode位图,确定哪一些的inode是空闲的,需要使用那个inode空间
//将inode位图对应的位置由0变为1,表示已经使用了这个inode
//然后在当前目录创建这个文件名和inode编号的映射关系
//向inode写入这个文件的所有属性
//当你的文件要写入的时候,确定哪一些的block是空闲的,需要使用那个block空间
//将block位图对应的位置由0变为1,表示已经使用了这个block
//然后block的编号与写入对应的inode里面,inode里面可以记录对应了哪些block

//删除文件
//根据目录中的inode对应关系,找到文件对应的inode和数据块,然后将对应的
//位图都置为零,相等于没有被占用, 对应目录的block记录的消息也要删除
//也就是对应的位图置零,随之对应的inode里面的映射关系也会改变
//但是删除的数据是还在的,下次创建文件的时候
//可以覆盖原来位置的数据

